package com.newsproject.service;


import com.newsproject.pojo.*;
import com.newsproject.pojo.DTO.*;
import org.springframework.stereotype.Service;
import java.util.List;

@Service

public interface AdminService {

/* 管理员对用户的管理 */

//分页获取用户列表
  UserListResponseDTO getUserList(int start, int pageSize, String keyword);

//获取用户总数
   int getAllUserCount();
//根据关键词获取用户总数
   int getUsersCountByKeyword(String keyword);

//根据用户id获取用户
    User getUserById(int userId);

//添加用户
    void addUser(User user);

//更新用户信息
     void updateUser(User user);

//删除用户
    Result<?> deleteUserById(int userId);

//批量删除用户
    void deleteUserByIds(int []userIds);

/*//模糊查询用户
   List<UserDTO> searchUsers(String keyword,int page,int pageSize);*/

//用户权限管理
    void banUser(int userId, boolean isBanned);   //对用户禁言
    void setPrivateMessagePermission(int userId, boolean isPrivateMessage);  // 设置私信权限
    void setBanAccountPermission(int userId, boolean canBanAccount);  // 设置封禁账号权限

//批量设置用户权限
    void batchUpdateUserPermissions(List<UserStatus> updateList);



/* 管理员对热搜的管理  */
//1.获取热搜列表
HotSearchListResponseDTO getHotSearchList(int start, int pageSize, String keyword);

//获取所有活跃的热搜
/*List<HotSearchPostDTO> getAllActiveHotSearch();*/

/*//2.获取热搜总数
    int getAllHotSearchCount();
//根据关键词获取热搜总数
    int getHotSearchCountByKeyword(String keyword);*/

//3.根据id获取热搜信息
    Post getPostById(int postId);
    HotSearch getHotSearchById(int hotSearchId);
    HotSearchPostDTO getHotSearchDTOById(int hotSearchId);
/*//4.添加及初始化热搜状态
    int addPost(Post post);
    void addHotSearch(HotSearch hotSearch);*/
//5.修改热搜部分信息
    void updateHotSearch(HotSearchPostDTO hotSearchPostDTO);
//6.1 修改单个热搜状态(是否屏蔽)
    void updateHotSearch_Blocked(int hotSearchId,boolean isBlocked);
//6.2 修改单个热搜状态(是否限流)
    void updateHotSearch_Limited(int hotSearchId,boolean isLimited);
//6.3 对限流检查,若成功访问,访问数增一
   boolean canAccessHotSearch(int hotSearchId);
//7.批量修改热搜状态
    void updateHotSearchStatusByIds(List<HotSearch> updateList);
//8.删除单个热搜
    void deleteHotSearchById(int hotSearchId);
//9.批量删除热搜
    void deleteHotSearchBatch(int[] hotSearchIds);
/*//10.查询热搜
    List<HotSearchPostDTO> searchHotSearch(String keyword,int start,int pageSize);*/


/* 管理员对标签的管理 */

//1.获取标签列表
    List<Tag> getTagList();

//2.添加标签
    void insertTag(Tag tag);

//3.修改标签状态
   void updateTag(Tag tag);

//4.删除标签
 void deleteTagById(int tagId);

//5.批量删除标签
    void deleteTagByIds(int []tagIds);

//6.查询标签
    List<Tag> searchTag(String keyword);

//根据标签id获取标签信息
    Tag getTagById(int tagId);

//根据post的Id获取标签Id
    int getTagIdByPostId(int postId);

//编辑标签
void editTagById(Tag tag);

/* 新闻审核 */

//1.获取待审核新闻列表
AuditPostResponseDTO getAuditingPostList(int start, int pageSize,String keyword);

/*//2.获取待审核新闻总数
    int getAllAuditingPostCount();

//根据关键词获取待审核新闻
   List<AuditPostDTO> searchAuditingPost(String keyword,int start, int pageSize);

//根据关键词获取待审核新闻总数
    int getAuditingPostCountByKeyword(String keyword);*/

//3.审核通过
    void updatePostAuditing(int postId,User adminUser);

//4.审核不通过
    void updatePostNotAuditing(int postId,User adminUser,String auditReason);

//5.批量审核通过
   void updatePostAuditingBatch(int[] postIds, User adminUser);

//6.批量审核不通过
    void updatePostNotAuditingBatch(int[] postIds,User adminUser,String auditReason);

//7.将审核记录上传至审核记录表中
    void insertAuditLog(AuditPost auditPost);

//8.获取审核记录分页表
AuditPostLogResponseDTO getAuditedPostList(String keyword,int start,int pageSize);

//11.根据id获取审核记录
    AuditPost getAuditedPostById(int postId);

//12.删除审核记录
    void deleteAuditedPostById(int auditId);

//13.批量删除审核记录
    void deleteAuditedPostByIds(int []auditIds);

}
